Spring Boot একটি জনপ্রিয় ফ্রেমওয়ার্ক যা Java এ এন্টারপ্রাইজ অ্যাপ্লিকেশন তৈরির জন্য ব্যবহৃত হয়। ORM (Object-Relational Mapping) হলো একটি প্রযুক্তি যা ডাটাবেসের সাথে অবজেক্ট গুলোর যোগাযোগের কাজ করে, আর Spring Boot ORM ব্যবহৃত হয় ডাটাবেসের সাথে যোগাযোগ করার জন্য। কখনো কখনো অ্যাপ্লিকেশনের মধ্যে একাধিক ডাটাবেস ব্যবহার করতে হয়। এই পরিস্থিতিতে Multiple DataSource কনফিগার করা প্রয়োজন।
এখানে দেখানো হবে কীভাবে Spring Boot এ Multiple DataSource কনফিগার করা যায়।
Multiple DataSource কনফিগারেশন এর জন্য প্রয়োজনীয় পদক্ষেপ
Spring Boot এ Multiple DataSource কনফিগার করতে হলে, কয়েকটি গুরুত্বপূর্ণ পদক্ষেপ অনুসরণ করতে হয়। চলুন একে একে এগুলো দেখি:
১. ডিপেন্ডেন্সি যুক্ত করা
প্রথমে, pom.xml ফাইলে দুইটি আলাদা ডাটাবেসের জন্য ডিপেন্ডেন্সি যোগ করতে হবে। উদাহরণস্বরূপ, MySQL এবং PostgreSQL:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
২. application.properties (বা application.yml) কনফিগার করা
এখন application.properties ফাইলে বিভিন্ন ডাটাবেসের কনফিগারেশন করতে হবে। উদাহরণস্বরূপ, MySQL এবং PostgreSQL এর জন্য আলাদা কনফিগারেশন করতে হবে:
# MySQL DataSource
spring.datasource.mysql.url=jdbc:mysql://localhost:3306/mysql_db
spring.datasource.mysql.username=root
spring.datasource.mysql.password=root
spring.datasource.mysql.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.mysql.jpa.hibernate.ddl-auto=update
spring.datasource.mysql.jpa.show-sql=true
# PostgreSQL DataSource
spring.datasource.postgresql.url=jdbc:postgresql://localhost:5432/postgresql_db
spring.datasource.postgresql.username=postgres
spring.datasource.postgresql.password=postgres
spring.datasource.postgresql.driver-class-name=org.postgresql.Driver
spring.datasource.postgresql.jpa.hibernate.ddl-auto=update
spring.datasource.postgresql.jpa.show-sql=true
৩. DataSource Bean কনফিগার করা
এখন Spring Boot এ দুটি আলাদা DataSource Bean কনফিগার করতে হবে, যাতে আপনি নির্দিষ্ট ডাটাবেস ব্যবহার করতে পারেন।
@Configuration
@EnableTransactionManagement
public class DataSourceConfig {
@Primary
@Bean(name = "mysqlDataSource")
@ConfigurationProperties(prefix = "spring.datasource.mysql")
public DataSource mysqlDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "postgresDataSource")
@ConfigurationProperties(prefix = "spring.datasource.postgresql")
public DataSource postgresDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
public PlatformTransactionManager transactionManager(@Qualifier("mysqlDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
এখানে, @Primary অ্যনোটেশনটি MySQL ডাটাবেসকে প্রধান DataSource হিসেবে চিহ্নিত করে।
৪. Entity Manager Factory কনফিগার করা
Spring Boot এ EntityManagerFactory কনফিগার করতে হবে যাতে ORM (JPA) ডাটাবেসের সাথে সংযোগ স্থাপন করতে পারে।
@Configuration
@EnableJpaRepositories(
basePackages = "com.example.repository.mysql",
entityManagerFactoryRef = "mysqlEntityManagerFactory",
transactionManagerRef = "mysqlTransactionManager"
)
public class MysqlJpaConfig {
@Primary
@Bean(name = "mysqlEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
@Qualifier("mysqlDataSource") DataSource dataSource,
EntityManagerFactoryBuilder builder) {
return builder
.dataSource(dataSource)
.packages("com.example.model.mysql")
.persistenceUnit("mysql")
.build();
}
@Primary
@Bean(name = "mysqlTransactionManager")
public PlatformTransactionManager transactionManager(
@Qualifier("mysqlEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
এটি MySQL ডাটাবেসের জন্য EntityManagerFactory কনফিগার করে এবং ট্যাক্সন ম্যানেজার তৈরি করে।
৫. PostgreSQL এর জন্য কনফিগারেশন
PostgreSQL এর জন্যও একইভাবে EntityManagerFactory এবং Repository কনফিগার করতে হবে।
@Configuration
@EnableJpaRepositories(
basePackages = "com.example.repository.postgresql",
entityManagerFactoryRef = "postgresEntityManagerFactory",
transactionManagerRef = "postgresTransactionManager"
)
public class PostgresqlJpaConfig {
@Bean(name = "postgresEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
@Qualifier("postgresDataSource") DataSource dataSource,
EntityManagerFactoryBuilder builder) {
return builder
.dataSource(dataSource)
.packages("com.example.model.postgresql")
.persistenceUnit("postgresql")
.build();
}
@Bean(name = "postgresTransactionManager")
public PlatformTransactionManager transactionManager(
@Qualifier("postgresEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
এভাবে Spring Boot এ Multiple DataSource কনফিগার করা যায়। এই প্রক্রিয়ায়, আপনার অ্যাপ্লিকেশন একাধিক ডাটাবেসের সাথে একযোগে কাজ করতে সক্ষম হবে।